Si abres hoy el pyproject.toml de un proyecto Python nuevo, es bastante probable que casi todo lo que lo rodea esté escrito en Rust: el gestor de paquetes, el linter, el formateador, el validador de datos y hasta el comprobador de tipos. El lenguaje sigue siendo Python, pero el motor que lo sostiene cambia a gran velocidad. Repasamos qué proyectos lo protagonizan, qué cifras se pueden respaldar con fuentes oficiales y dónde el fenómeno deja de tener sentido.
Los datos de popularidad (estrellas en GitHub) y las versiones están tomados del 13 de octubre de 2026.
La ola en cinco líneas
- uv (Astral) reúne en un binario lo que antes hacían pip, pip-tools, pipx, Poetry, pyenv, twine y virtualenv.
- Ruff sustituye a Flake8 y sus plugins, isort, pydocstyle, pyupgrade y autoflake, y trae un formateador compatible con Black.
- Polars es la alternativa en Rust a pandas y acaba de llegar a la versión 2.0.
- Pydantic v2 valida con un núcleo en Rust, y ese núcleo ya vive dentro del propio repositorio de Pydantic.
- PyO3 y maturin son las dos piezas que hacen que escribir una extensión de Python en Rust sea razonable.
Gestión de paquetes: uv
uv se presenta como «una sola herramienta para reemplazar pip, pip-tools, pipx, poetry, pyenv, twine, virtualenv y más». Su README afirma que es de 10 a 100 veces más rápido que pip. Conviene leer esa cifra con calma: sus benchmarks están medidos en macOS, con Python 3.12.4 para las herramientas que no son uv y con el docs-requirements.in del proyecto Trio como carga de trabajo, y los propios autores avisan de que el rendimiento puede variar mucho entre sistemas operativos y sistemas de ficheros. En una instalación en caliente con caché y buena red, la diferencia que notarás será menor que en una instalación en frío dentro de un pipeline de CI, que es donde más se nota.
Más que la velocidad, lo que ha hecho que muchos equipos se pasen es el conjunto de funciones:
- Gestión de proyectos con lockfile y espacios de trabajo (workspaces).
- Dependencias dentro de un script suelto, mediante metadatos en línea.
- Instalación y cambio entre versiones de Python, sin pyenv ni Homebrew de por medio.
- Ejecución de herramientas sin instalarlas globalmente con
uvx. - Una interfaz compatible con pip (
uv pip) para migrar sin reescribir todo. - Una caché global que deduplica ficheros y ahorra disco.
uv init mi-proyecto cd mi-proyecto uv add requests flask uv run python app.py uvx ruff check .
En GitHub acumula más de 90 000 estrellas, y la versión más reciente es la 0.13.0, publicada el 9 de octubre de 2026. Sigue siendo una versión 0.x, algo que hay que tener presente al fijar versiones en CI.
Rye ya es historia
Rye, el gestor de proyectos que Astral había adoptado, se archivó el 5 de febrero de 2026. Su README recomienda migrar a uv, que describe como su sucesor mantenido por los mismos desarrolladores, y avisa de que ya no habrá más actualizaciones, ni siquiera de seguridad.
El acuerdo con OpenAI
Hay un detalle que cambia la lectura de todo esto: el 19 de marzo de 2026 OpenAI anunció que adquiriría Astral, la empresa detrás de uv, Ruff y ty, y que su equipo pasaría a Codex. Según la cobertura de The New Stack, el acuerdo estaba sujeto a aprobación regulatoria y ambas partes prometieron mantener las herramientas como open source. No he encontrado una confirmación pública del cierre de la operación, así que trátalo como pendiente de verificar. Ya analizamos las implicaciones para equipos y CI en este artículo sobre uv y OpenAI.
Linting y formato: Ruff
Ruff es un único binario que reemplaza a Flake8 (con docenas de plugins), Black, isort, pydocstyle, pyupgrade y autoflake. Su documentación recoge más de 900 reglas, muchas reimplementadas desde plugins de Flake8 como bugbear, bandit o simplify, además de reglas de Pylint, pycodestyle o pyflakes. El README habla de un rendimiento de 10 a 100 veces superior al de los linters y formateadores tradicionales, y entre los proyectos que lo usan cita Apache Airflow, FastAPI, Hugging Face, pandas y SciPy.
La ventaja práctica no es ganar unos segundos en el pre-commit. Si el análisis tarda décimas de segundo, puedes lanzarlo en cada guardado desde el editor y corregir los fallos al momento, en lugar de acumularlos hasta el commit.
ruff check --fix . ruff format .
Ruff está en la versión 0.17.0 (9 de octubre de 2026) y supera las 50 000 estrellas.
Comprobadores de tipos: ty y Pyrefly
La misma jugada se repite con los tipos. ty, también de Astral, se define como un comprobador de tipos y servidor de lenguaje «extremadamente rápido, escrito en Rust», con una ventaja anunciada de 10 a 100 veces frente a mypy y Pyright. Sigue en beta, con versiones 0.0.x y sin API estable. Pyrefly, de Meta, ya ha alcanzado la 1.0 y declara más de 1,85 millones de líneas comprobadas por segundo. Son dos competidores directos de mypy y Pyright, y ninguno de los dos existía hace pocos años.
Datos: Polars frente a pandas
Polars es una librería de DataFrames escrita en Rust, con una API distinta a la de pandas, de modo que no es un reemplazo directo. Pasa de las 40 000 estrellas, mientras que pandas ronda las 50 000, así que ni de lejos lo ha desbancado.
La novedad reciente es Polars 2.0 (la versión final de Python figura como publicada el 6 de octubre de 2026). El cambio más importante: collect() sobre un LazyFrame usa ahora por defecto el motor de streaming. Ritchie Vink, su creador, espera que en conjunto sea «fácilmente 5 veces más rápido», con un uso de memoria bastante menor. Esto permite procesar conjuntos de datos mayores que la RAM, aunque con matices:
- El motor de streaming no garantiza el orden de las filas en joins, group-bys y unpivots. Si lo necesitas, usa
maintain_order=Trueo ordena explícitamente. - Pasar a la versión 2 elimina varios casts ambiguos y endurece la coerción de tipos, así que es posible que tengas que tocar código existente.
- El volcado a disco (spill) cubre ordenaciones, funciones de ventana y bastantes expresiones, pero joins y group-bys siguen en memoria según la cobertura que he consultado.
Para un proyecto con pandas que funciona bien, no hay prisa. Para un pipeline nuevo o uno que ya sufre con la memoria, vale la pena una prueba comparada con tus datos reales.
La capa invisible
Mucho Rust ya corre bajo tu código Python sin que lo notes.
Pydantic v2
Pydantic v2 delega la validación en pydantic-core, un motor escrito en Rust. En su artículo sobre la versión 2 hablaban de una mejora de entre 4 y 50 veces respecto a la 1.9.1 en los benchmarks de pydantic-core, y de unas 17 veces para un modelo con campos habituales. Desde abril de 2026 el repositorio pydantic-core está archivado porque su código ya reside dentro del repositorio principal de pydantic, que va por la 2.14.1. Si trabajas con FastAPI, ya lo usas.
tokenizers (Hugging Face)
La librería tokenizers tiene el núcleo en Rust y enlaces para Python y Node.js, con modelos BPE, Unigram, WordPiece y WordLevel. Su README presenta ahora una versión 1.0 en candidata a lanzamiento, con rutas vectorizadas para NEON en aarch64, SSE/AVX-512 en x86_64 y simd128 en WebAssembly, y con portátil de reserva sin SIMD. La cifra clásica de «1 GB en menos de 20 segundos» que se cita a menudo no aparece en el README actual, así que no la tomes como dato verificado.
Qdrant
Qdrant es un motor de búsqueda vectorial escrito en Rust, con más de 35 000 estrellas. Su guía de cuantización documenta tres vías para reducir memoria: la cuantización escalar la divide por 4, la binaria por 32 y la de producto permite una compresión de hasta 64 veces, a costa de más lentitud y menos precisión. Son cifras de compresión de los vectores; el ahorro real de RAM depende de dónde dejes los vectores originales.
Otros ejemplos
No son novedades, pero completan el panorama: orjson, un serializador JSON escrito en Rust, y cryptography, que necesita Rust para compilarse desde código fuente y lo usa para tareas como el análisis ASN.1, mientras OpenSSL se encarga de las operaciones criptográficas propiamente dichas.
El puente: PyO3 y maturin
Esta ola no habría sido tan fácil sin dos herramientas. PyO3 (versión 0.29.3 a fecha de hoy) permite escribir módulos nativos de Python en Rust y se encarga de la conversión entre objetos de ambos lenguajes. maturin (1.15.0) compila el crate y empaqueta el wheel, con compatibilidad para Windows, Linux, macOS y FreeBSD, y una reimplementación de auditwheel para las etiquetas manylinux. Soporta enlaces con pyo3, cffi y uniffi. El flujo de trabajo cabe en tres comandos:
maturin new mi-extension maturin develop maturin build
La documentación de maturin recomienda uv publish para subir el paquete a PyPI, otro ejemplo de cómo se refuerzan entre sí estas herramientas.
Por qué Rust y no C
- Binarios nativos sin intérprete. Ruff o uv se distribuyen como un ejecutable. Con ello no dependen de que Python esté instalado, lo cual tiene especial interés en un gestor que se encarga de instalar Python.
- Paralelismo real. Las herramientas escritas en Rust reparten el trabajo entre todos los núcleos sin pasar por el GIL.
- Seguridad de memoria sin recolector de basura. El compilador evita buena parte de los fallos clásicos de C y C++ (uso tras liberación, desbordamientos, carreras de datos).
El segundo punto merece un matiz. Python 3.14 ya soporta oficialmente el modo free-threaded (PEP 779), con una penalización en código monohilo de alrededor del 5-10 %. Cuando se generalice, la ventaja de saltarse el GIL perderá peso para quien escriba extensiones, aunque no la de la velocidad bruta ni la de la distribución como binario único.
Lo que Rust no va a reescribir
- Frameworks web como Django o Flask. El cuello de botella suele ser la base de datos o la red, no el enrutado.
- Los notebooks. Jupyter e IPython dependen de la introspección dinámica y del REPL interactivo.
- NumPy, SciPy y similares. Ya son envoltorios sobre C y Fortran. Cambiarlos por Rust supone un coste de migración alto con poca ganancia.
Lo que se reescribe tiene dos rasgos comunes: trabajo limitado por la CPU (análisis sintáctico, linting, resolución de dependencias, tokenización) y poca necesidad de las funciones dinámicas de Python.
Qué conviene hacer
- Probar ya: uv y Ruff. Son fáciles de adoptar, se pueden usar en paralelo con tu flujo actual y el beneficio es inmediato en CI.
- Evaluar con calma: Polars 2.0 en proyectos de datos nuevos, y los comprobadores de tipos ty y Pyrefly si te interesa un chequeo rápido. ty sigue en beta.
- Revisar: si sigues en Pydantic v1, el salto a la v2 supone una mejora de rendimiento notable.
- No hace falta: reescribir tu aplicación web en Rust ni abandonar pandas si funciona.
Para más contexto sobre el movimiento en general, tenemos otro artículo sobre por qué medio ecosistema se pasa a Rust.
Rust no sustituye a Python, sino que se encarga de las partes pesadas que rodean al lenguaje. La pregunta abierta ya no es qué herramienta del ecosistema será la siguiente, sino qué hará la comunidad cuando las más críticas dependan de empresas concretas, como ocurre con uv y Ruff tras el acuerdo de Astral.
Imagen: Pexels / Daniil Komov
